#ifndef ContainerTypes_First
#define ContainerTypes_First
#ifdef __GNUG__
#pragma interface
#endif

#include "Types.h"

class Object;

typedef bool (*pEqualFunc)(void*, void*);
typedef u_long (*pHashFunc)(void*);
typedef int (*pCompareFunc)(void*, void*);

//---- ContainerTypes ----------------------------------------------------------

class ContainerTypes {
public:
	//---- comparison functions (for the sake of the global name space)
	static int Compare(Object*, Object*);
	static bool Equal(Object*, Object*);
	static u_long Hash(Object*op);
	static bool Identical(Object*, Object*);
	static u_long HashPtr(Object*);

	static int pCompare(void*, void*);
	static bool pEqual(void*, void*);
	static u_long pHash(void*);
	static bool pIdentical(void*, void*);
	static u_long pHashPtr(void*);
};

extern "C" int ppCompare(const void*, const void*);   // for qsort

#endif


